#include <iostream>
using namespace std;
//不正确版
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
//class Solution {
//public:
//    void printfront(TreeNode* root,int sum,vector<int> v,int targetSum,vector<vector<int>>& vv,int& flag)
//    {
//        if(root==nullptr)
//        {
//            if(sum==targetSum&&flag==0)
//            {
//                flag=1;
//                vv.push_back(v);
//            }
//            return;
//        }
//        flag=0;
//        sum+=root->val;
//        v.push_back(root->val);
//        if(root->left==root->right&&root->left==nullptr)
//        {
//            if(sum!=targetSum)
//                v.pop_back();
//        }
//        printfront(root->left,sum,v,targetSum,vv,flag);
//        printfront(root->right,sum,v,targetSum,vv,flag);
//
//    }
//    vector<vector<int>> pathSum(TreeNode* root, int targetSum) 
//    {
//        vector<vector<int>> vv;
//        if(root==nullptr)
//            return vv;
//        int sum=0;
//        vector<int> v;
//        int flag=0;
//        printfront(root,sum,v,targetSum,vv,flag);
//        return vv;
//    }
//};
//正确版
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
//class Solution {
//public:
//    void printfront(TreeNode* root,int sum,vector<int> v,int targetSum,vector<vector<int>>& vv)
//    {
//        if(root==nullptr)
//            return;
//        sum+=root->val;
//        v.push_back(root->val);
//        if(root->left==root->right&&root->left==nullptr)
//        {
//            if(sum!=targetSum)
//                v.pop_back();
//            else
//                vv.push_back(v);
//        }
//        printfront(root->left,sum,v,targetSum,vv);
//        printfront(root->right,sum,v,targetSum,vv);
//    }
//    vector<vector<int>> pathSum(TreeNode* root, int targetSum) 
//    {
//        vector<vector<int>> vv;
//        if(root==nullptr)
//            return vv;
//        int sum=0;
//        vector<int> v;
//        printfront(root,sum,v,targetSum,vv);
//        return vv;
//    }
//};
